home *** CD-ROM | disk | FTP | other *** search
-
- static char rcsid[] = "@(#)$Id: getword.c,v 5.1 1993/01/19 04:46:21 syd Exp $";
-
- /*******************************************************************************
- * The Elm Mail System - $Revision: 5.1 $ $State: Exp $
- *
- * Copyright (c) 1993 USENET Community Trust
- *******************************************************************************
- * Bug reports, patches, comments, suggestions should be sent to:
- *
- * Syd Weinstein, Elm Coordinator
- * elm@DSI.COM dsinc!elm
- *
- *******************************************************************************
- * $Log: getword.c,v $
- * Revision 5.1 1993/01/19 04:46:21 syd
- * Initial Checkin
- *
- *
- ******************************************************************************/
-
- #include <stdio.h>
- #include <ctype.h>
- #include "defs.h"
-
- int get_word(buffer, start, word, wordlen)
- char *buffer;
- int start;
- char *word;
- int wordlen;
- {
- /*
- * Extracts the next white-space delimited word from the "buffer"
- * starting at "start" characters into the buffer and skipping any
- * leading white-space there. Handles backslash-quoted characters
- * and double-quote bracked strings as an atomic unit. The resulting
- * word, up to "wordlen" bytes long, is saved in "word". Returns the
- * buffer index where extraction terminated, e.g. the next word can be
- * extracted by starting at start+<return-val>. If no words are found
- * in the buffer then -1 is returned.
- */
-
- register int len;
- register char *p;
-
- for (p = buffer+start ; isspace(*p) ; ++p)
- ;
-
- if (*p == '\0')
- return (-1); /* nothing IN buffer! */
-
- while (*p != '\0') {
- len = len_next_part(p);
- if (len == 1 && isspace(*p))
- break;
-
- while (--len >= 0) {
- if (--wordlen > 0)
- *word++ = *p;
- ++p;
- }
- }
-
- *word = '\0';
- return (p - buffer);
- }
-
-
- #ifdef _TEST
- main()
- {
- char buf[1024], word[1024], *bufp;
- int start, len;
-
- while (gets(buf) != NULL) {
-
- puts("parsing with front of buffer anchored");
- start = 0;
- while ((len = get_word(buf, start, word, sizeof(word))) > 0) {
- printf("start=%d len=%d word=%s\n", start, len, word);
- start = len;
- }
- putchar('\n');
-
- puts("parsing with front of buffer updated");
- bufp = buf;
- while ((len = get_word(bufp, 0, word, sizeof(word))) > 0) {
- printf("start=%d len=%d word=%s\n", 0, len, word);
- bufp += len;
- }
- putchar('\n');
-
- }
-
- exit(0);
- }
- #endif
-
-